<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  
</body>
</html>

<script>
var num = 1;
var num = 2;
console.log(num);

// 上面这种特性，是 JS 的缺陷。
// 原因：若 多人 写代码， 变量名 非常容易 冲突，进而造成 变量 值 被覆盖。


/* 
var f = function() {
  // 函数内部的 num 不影响 全局作用域 的 变量
  var num = 11;
  console.log('in', num);
}

f() //  ->  函数的引用  +  `()`  , 表示函数的执行
*/


/* 将上面的代码改造
  立即执行函数；
  机制：(”匿名函数“表达式)()  ->  表示将 匿名函数 立即 执行
  (function() {
    // 函数内部的 num 不影响 全局作用域 的 变量
    var num = 11;
    console.log('in - 1', num);
  })()
 */

//  立即执行函数的作用：防止代码块间 变量名的冲突


console.log('out', num);


</script>